package com.party.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.party.domain.Discuss;
import com.party.dto.Page;
import com.party.exception.ServiceException;
import com.party.mapper.DiscussMapper;
import com.party.service.DiscussService;
/**
 * 
 * @author Caizhf
 * @date 2017年5月14日下午1:28:54
 * @version v.0.1
 * @email 1115054416@qq.com 
 *
 * <p>Description: 评价、评论业务</p>
 *
 */
//当前只涉及这两个业务，需要的时候再添加
@Service
@Transactional(propagation=Propagation.REQUIRED)
public class DiscussServiceImpl implements DiscussService {
	@Autowired
	private DiscussMapper discussMapper;
	
	//删除评价
	@Override
	public void deleteEvaluate(int discuss_id) {
		int status = discussMapper.deleteById(discuss_id);
		if(status==0)
			throw new ServiceException("删除评价失败，这个评价已经不存在了");
	}

	//某个用户评价某个商品
	@Override
	public Discuss evaluate(Discuss discuss) {
		discuss.setDiscuss_comment_time(new Date());
		int status = discussMapper.add(discuss);
		if(status==0)
			throw new ServiceException("评价失败！");
		return discuss;
	}

	//修改评价
	@Override
	public Discuss updateEvaluate(Discuss discuss) {
		discuss.setDiscuss_comment_time(new Date());
		int status = discussMapper.update(discuss);
		if(status==0)
			throw new ServiceException("修改评价失败");
		
		return find(discuss.getDid());
	}

	
	@Override
	public Discuss find(int discuss_id) {
		Discuss discuss = discussMapper.findById(discuss_id);
		if(discuss==null)
			throw new ServiceException("找不到这条评价，可能已经过期了呢~");
		return discuss;
	}
	
	
	/**
	 * 分页，每页显示十条数据，查看某个商品下面的所有评价信息
	 * @param product_id 商品
	 * @param pageNum 页码
	 * @return
	 */
	public Page findProductAllEvaluate(int product_id,int pageNum){
		//查询商品下所有的评论数
		int totleRecord = getProductDiscussTotleRecord(product_id);
		Page page = null;
		//如果传入的页码为空，说明这是第一页
		if(pageNum==0)
			page = new Page(totleRecord,1);
		else
		//如果不为空，那么就按照想看的页码进行
			page = new Page(totleRecord,pageNum);
		List<Discuss> list = discussMapper.findByProductId(product_id, page.getStartindex(), page.getPAGESIZE());
		page.setList(list);
		return page;
	}
	
	
	/**
	 * 得到某个商品下的所有评价数
	 * @param product_id
	 * @return
	 */
	public int getProductDiscussTotleRecord(int product_id){
		int totleRecord = discussMapper.findProductDiscussTotleRecord(product_id);
		if(totleRecord==0)
			throw new ServiceException("当前还没有任何的评价");
		return totleRecord;
	}

	/**
	 * 为了方便控制平台洁净，可以适当查看某个用户做出的评价是否合法
	 * @param user_id
	 * @return
	 */
	public List<Discuss> findUserAllEvaluate(int user_id){
		List<Discuss> list = discussMapper.findByUserId(user_id);
		if(null==list||list.size()==0){
			throw new ServiceException("当前用户没有任何评价记录");
		}
		return list;
	}
	
}
